一、题目链接
http://noi.openjudge.cn/ch0107/02/
二、解题思路
2.1 java.lang.String.indexOf(char ch)
方法:返回ch
在字符串中第一次出现的位置,字符串不含ch
则返回-1
;
2.2 java.lang.String.lastIndexOf(char ch)
方法:返回ch
在字符串中最后一次出现的位置,字符串不含ch
则返回-1
;
2.3 循环遍历给定字符串的每个字符:
▲ 如果当前字符第一次出现的位置等于它最后一次出现的位置,则该字符就是所求字符;
2.4 如果给定字符串不存在只出现一次的字符,则输出no
。
三、实施步骤
3.1 自定义方法public int occurOnce(String text)处理所有业务逻辑:
→ 参数text
为String
类型的对象,代表给定字符串;
→ 方法occurOnce
返回int
类型的整数,代表text
中第一个只出现一次的字符的位置,没有则为-1。
自定义方法public int occurOnce(String text)实施步骤如下:
首先,定义char[] chars=text.toCharArray()
,将text
的内容转存为字符数组处理;
其次,定义int
类型的变量n=text.length()
,代表text
的长度;
然后,通过整数标记i
代表位置,i
从0
开始,到n-1
为止,更新步长为1
,循环处理如下:
▲ if text.indexOf(chars[i]) == text.lastIndexOf(chars[i])
:返回i
;
最后,返回-1
。
3.2 在方法main
中输入给定字符串,将其作为参数注入方法occurOnce
,获得计算结果,如果计算结果为-1
,则输出no
,否则输出对应的字符。
四、Java程序
import java.util.Scanner;
public class Main {
/**
* 返回给定字符串中第一个只出现一次的字符的位置
*
* @param text String类型的对象,代表给定字符串
* @return int类型的整数,代表text中第一个只出现一次的字符的位置,没有则为-1
*/
public int occurOnce(String text) {
char[] chars = text.toCharArray(); // 将text的内容转存为字符数组处理
int n = text.length(); // text的长度
/* 整数标记i代表位置,i从0开始,到n-1为止,更新步长为1 */
for (int i = 0; i < n; i++) {
// 如果当前字符chars[i]在text中第一次出现的位置等于它最后一次出现的位置
if (text.indexOf(chars[i]) == text.lastIndexOf(chars[i])) {
return i; // 说明当前字符chars[i]即为所求字符,返回它的位置i
}
}
return -1; // 以上没有产生返回,说明没有符合条件的字符,返回-1
}
public static void main(String[] args) {
Main test = new Main();
Scanner input = new Scanner(System.in);
String text = input.next(); // 定义并输入给定字符串
int ans = test.occurOnce(text); // 调用occurOnce方法获得text中第一个只出现一次的字符的位置
System.out.print(ans == -1 ? "no" : text.charAt(ans)); // ans为-1则输出no,否则输出对应的字符
}
}