返回字符串中第一个不重复的字符
return first non repeating character in a string
我必须解决这个问题,在这个问题中,给定一个字符串,我必须返回字符串中的第一个不重复字符。
我使用hashtable解决了这个问题,并编写了一个方法,该方法对字符串进行常量引用,并返回第一个不重复的字符。然而,当字符串中没有非重复字符时,我返回-1,在主程序中,我检查如下
char c = firstNonRepeating( word );
if (static_cast<int> (c) == -1)
cout<<"no non repeating character presentn";
else
cout<<c<<endl;
当所需字符不存在时,这是返回-1的正确方法吗?
您可以简单地使用return
和0
。因为从逻辑上讲,在任何情况下,0
都是任何以nul结尾的字符串中的第一个不重复字符!
我认为返回-1
很容易出错,因为您对int
进行了强制转换,而且255
也是一个有效字符。
这可能是一个风格问题,但我更喜欢这样的东西:
char c;
bool result = getFirstNonRepeating(word, c);
if (result)
cout << "no non repeating character presentn";
else
cout << c << endl;
其中,如果getFirstNonRepeating
返回false
,则未指定调用后c
的值。
这样,返回值和操作的结果(或失败)之间就不会有歧义,如果您需要更改逻辑,则getFirstNonRepeating
函数甚至可以用于' '
或0xFF
字符。
还有一个选项:为了更类似于STL算法,您可以将迭代器返回到第一个不重复的字符,如果没有迭代器,只需返回string.end()。
我已经使用HashMap来计算字符
FirstNonRepeating(String s){
HashMap<Character, Integer> count = new HashMap<Character, Integer>();
int n = s.length();
for (int i = 0; i < n; i++) {
char c = s.charAt(i);
count.put(c, count.getOrDefault(c, 0) + 1);
}
// find & print the index position
for (int i = 0; i < n; i++) {
if (count.get(s.charAt(i)) == 1)
System.out.println(i);
}
相关文章:
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 将 NULL 与 C 的字符* 字符串一起使用
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 无法将常量字符字符串传递给模板类
- 如何组合一个宽字符字符串,中间插入一些空字符
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 从给定索引返回子字符字符串的函数
- 字符 [](c 字符串)的初始化标准
- 如何将字符字符串用作数学运算符
- 将 Unicode 字符/字符串写入文件
- C++,字符* 字符串修改
- 如何有效地用不同的整数元素替换字符字符串的元素
- C++:如果我们在字符串中添加一些整数,为什么它会从开头删除该数量的字符?(字符串 + 整数)
- strcpy正在复制sth字符i字符串.如何解决此错误
- 在C++中将双精度转换为字符*/字符串
- C 中的宽字符字符串
- 如何提取C 中的字符/字符串之间的字符串
- 无法将字符/字符串转换为int
- 带有指针的反转字符字符串
- 反转字符串中的 n 个字符(字符串中没有空格),而不使用 c++ 中的内置函数